<template>
  <input type="text" class="myinput" @input="handerInput" 
  :class="{success:statu,error:!statu}"
  @change="handlerChange"/>
</template>

<script>
export default {
  props: {
    rules: {
      //验证规则
      type: RegExp,
    },
    msg:{
      type:String,
      default:'当前输入有误'
    }
  },
  data() {
    return {
      statu: true
    };
  },
  methods: {
    handerInput(e) {
      // 先获取用户输入的内容
      let v = e.target.value;
      // 对内容进行验证
      if(this.rules){
        if(this.rules.test(v)){
            this.statu = true
        }else{
          this.statu = false
        }
        // 这里一定要发出input事件，否则v-model不起作用
        this.$emit("input", v);
      }
    },
    // 当失去焦点的时候，根据验证规则给出提示
    handlerChange(e){
      let v = e.target.value;
      if (this.rules){
        if(!this.rules.test(v)){
          // alert(this.msg)
          this.$toast.fail({
            message:this.msg,
            duration:3000
          })
        }
      }
    }
  },
};
</script>

<style lang="less">
.myinput {
  width: 320 * 100vw/360;
  height: 60px;
  outline: none;
  border: none;
  border-bottom: 3px solid #ccc;
  font-size: 20px;
  line-height: 60px;
}
.success {
  border-bottom-color: green;
}
.error {
  border-bottom-color: red;
}
</style>